package com.lingxinst.farm.base.ui

import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding
import androidx.lifecycle.ViewModelProvider
import com.lingxinst.farm.base.vm.BaseViewModel

abstract class BaseMvvmActivity<VDB : ViewDataBinding, VM : BaseViewModel>(val layoutResId: Int) :
    BaseActivity() {
    private var _binding: VDB? = null
    val mBinding: VDB get() = _binding!!


    private var _viewModel: VM? = null
    val mViewModel: VM get() = _viewModel!!

    override fun initVM() {
        // 初始化 ViewDataBinding（根据 layoutResId 布局文件自动生成的）
        _binding = DataBindingUtil.setContentView<VDB>(this, layoutResId)
        // 初始化ViewModel 实例
        _viewModel = ViewModelProvider(this)[getVMClass()]
        // 设置数据
        setBindingData()
        // 在Android开发中的作用是将当前Activity或Fragment的生命周期与DataBinding绑定，
        // 确保LiveData对象能够感知生命周期的变化，从而在UI更新时不会导致内存泄漏或无效的UI更新。
        // 具体作用
        // 感知生命周期变化‌：通过调用binding.setLifecycleOwner(this);，DataBinding能够感知到当前Activity或Fragment的生命周期变化。这意味着当Activity或Fragment被销毁时，绑定的LiveData对象也会相应地被清理，避免内存泄漏。
        // 自动更新UI‌：当LiveData对象中的数据发生变化时，如果设置了LifecycleOwner，DataBinding会自动更新绑定的视图，确保UI与数据保持同步。
        mBinding.lifecycleOwner = this

    }


    abstract fun getVMClass(): Class<VM>

    /**
     * binding 绑定数据源
     */
    open fun setBindingData(){}

    override fun onDestroy() {
        super.onDestroy()
        _binding = null
    }

}
